js Array中 filter、map和reduce的用法

js filter

根据回调函数的条件,返回对应的数组。

1
2
3
4
var arr = [1,2,3,4,5];
arr.filter(function(elem){
return elem > 2
}) //[3,4,5]

js map

对每个元素进行操作,并返回新的数组。

1
2
3
4
var arr = [1,2,3,4,5];
arr.map(function(elem){
return elem * 2
}) //[2,4,6,8,10]

js reduce

通过回调函数不断累计后返回一个值。

1
2
3
4
var arr = [1,2,3,4,5];
arr.reduce(function(result, elem){
return result + elem
}, 0) //15

实战

初始条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var students = [
{
name:'小红',
age:22,
score:80
},
{
name:'小白',
age:21,
score:66
},
{
name:'小琦',
age:27,
score:77
},
{
name:'小明',
age:20,
score:85
},
{
name:'小二',
age:25,
score:90
}
];

筛选出年龄大于或等于22岁的同学,其成绩的平均值。

  • 用filter筛选年龄大于或等于22的同学
  • 用map得到人数
  • 用reduce计算成绩之和
1
2
3
4
5
6
7
8
9
10
11
12
13
var count = 1;
students
.filter(function(ele, index){
return ele.age >= 22
})
.map(function(obj, index){
count = index+1;
return obj;
})
.reduce(function(a, b){
return a+b.score
},0)/count